(function () { "use strict"; var cfg = typeof window.travelgoHotelAkbarCalendar === "object" && window.travelgoHotelAkbarCalendar ? window.travelgoHotelAkbarCalendar : {}; var S = cfg.strings || {}; function pad2(n) { return n < 10 ? "0" + n : String(n); } function localIsoDate(d) { if (!d || isNaN(d.getTime())) { return ""; } return d.getFullYear() + "-" + pad2(d.getMonth() + 1) + "-" + pad2(d.getDate()); } function parseIso(iso) { if (!iso) { return null; } var d = new Date(iso + "T12:00:00"); return isNaN(d.getTime()) ? null : d; } function addDays(d, n) { var x = new Date(d.getTime()); x.setDate(x.getDate() + n); return x; } function sameDay(a, b) { return ( a && b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate() ); } function monthStart(d) { return new Date(d.getFullYear(), d.getMonth(), 1, 12, 0, 0, 0); } function formatAkbarMain(iso) { var d = parseIso(iso); if (!d) { return "\u2014"; } var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; return d.getDate() + " " + months[d.getMonth()] + "'" + String(d.getFullYear()).slice(2); } function formatAkbarDow(iso) { var d = parseIso(iso); if (!d) { return ""; } var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; return days[d.getDay()]; } function nightsBetween(ci, co) { var a = parseIso(ci); var b = parseIso(co); if (!a || !b) { return 1; } return Math.max(1, Math.round((b.getTime() - a.getTime()) / 86400000)); } function defaultDates() { var ci = addDays(new Date(), 1); var co = addDays(ci, 1); return { ci: localIsoDate(ci), co: localIsoDate(co) }; } function init(root) { if (!root || root.getAttribute("data-tgpe-cal-wired") === "1") { return; } var checkin = root.querySelector("#tgpe-checkin"); var checkout = root.querySelector("#tgpe-checkout"); var checkinTrigger = root.querySelector("#tgpe-checkin-trigger"); var checkoutTrigger = root.querySelector("#tgpe-checkout-trigger"); var checkinDisplay = root.querySelector("#tgpe-checkin-display"); var checkinDow = root.querySelector("#tgpe-checkin-dow"); var checkoutDisplay = root.querySelector("#tgpe-checkout-display"); var checkoutDow = root.querySelector("#tgpe-checkout-dow"); var nightsNum = root.querySelector("#tgpe-nights-num"); var nightsLbl = root.querySelector("#tgpe-nights-lbl"); var cal = root.querySelector("#tgpe-date-cal"); var calBackdrop = root.querySelector("#tgpe-date-cal-backdrop"); var calMonths = root.querySelector("#tgpe-cal-months"); var calHint = root.querySelector("#tgpe-cal-hint"); var calDone = root.querySelector("#tgpe-cal-done"); var calPrev = root.querySelector("#tgpe-cal-prev"); var calNext = root.querySelector("#tgpe-cal-next"); if (!checkin || !checkout || !cal || !calMonths) { return; } var defs = defaultDates(); if (!checkin.value) { checkin.value = defs.ci; } if (!checkout.value) { checkout.value = defs.co; } var viewStart = monthStart(new Date()); var pickPhase = "checkin"; var hoverIso = ""; function todayIso() { return localIsoDate(new Date()); } function updateDisplays() { if (checkinDisplay) { checkinDisplay.textContent = formatAkbarMain(checkin.value); } if (checkinDow) { checkinDow.textContent = formatAkbarDow(checkin.value); } if (checkoutDisplay) { checkoutDisplay.textContent = formatAkbarMain(checkout.value); } if (checkoutDow) { checkoutDow.textContent = formatAkbarDow(checkout.value); } var nights = nightsBetween(checkin.value, checkout.value); if (nightsNum) { nightsNum.textContent = String(nights); } if (nightsLbl) { nightsLbl.textContent = nights === 1 ? S.nightSingular || "NIGHT" : S.nightPlural || "NIGHTS"; } root.dispatchEvent( new CustomEvent("travelgo:hotel-akbar-dates-updated", { bubbles: true, detail: { checkin: checkin.value, checkout: checkout.value }, }) ); } function setHint() { if (!calHint) { return; } calHint.textContent = pickPhase === "checkout" ? S.selectCheckOut || "Select check-out date" : S.selectCheckIn || "Select check-in date"; } function closeCal() { cal.setAttribute("hidden", "hidden"); if (calBackdrop) { calBackdrop.setAttribute("hidden", "hidden"); } if (checkinTrigger) { checkinTrigger.setAttribute("aria-expanded", "false"); } if (checkoutTrigger) { checkoutTrigger.setAttribute("aria-expanded", "false"); } var hero = document.querySelector(".travelgo-hero--akbar"); if (hero) { hero.classList.remove("is-hotel-cal-open"); } } function openCal(phase) { var paxPop = root.querySelector("#tgpe-pax-pop"); if (paxPop && !paxPop.hasAttribute("hidden")) { paxPop.setAttribute("hidden", "hidden"); var paxBackdrop = root.querySelector("#tgpe-pax-backdrop"); if (paxBackdrop) { paxBackdrop.setAttribute("hidden", "hidden"); } var paxTrigger = root.querySelector("#tgpe-pax-trigger"); if (paxTrigger) { paxTrigger.setAttribute("aria-expanded", "false"); } } pickPhase = phase === "checkout" ? "checkout" : "checkin"; var ci = parseIso(checkin.value); viewStart = monthStart(ci || addDays(new Date(), 1)); cal.removeAttribute("hidden"); if (calBackdrop) { calBackdrop.removeAttribute("hidden"); } if (phase === "checkout" && checkoutTrigger) { checkoutTrigger.setAttribute("aria-expanded", "true"); if (checkinTrigger) { checkinTrigger.setAttribute("aria-expanded", "false"); } } else if (checkinTrigger) { checkinTrigger.setAttribute("aria-expanded", "true"); if (checkoutTrigger) { checkoutTrigger.setAttribute("aria-expanded", "false"); } } var hero = document.querySelector(".travelgo-hero--akbar"); if (hero) { hero.classList.add("is-hotel-cal-open"); } setHint(); renderMonths(); } function isDisabled(iso) { if (!iso) { return true; } if (iso < todayIso()) { return true; } if (pickPhase === "checkout" && checkin.value) { var minCo = localIsoDate(addDays(parseIso(checkin.value), 1)); return iso < minCo; } return false; } function inRange(iso) { if (!checkin.value || !checkout.value) { return false; } return iso > checkin.value && iso < checkout.value; } function monthLabel(d) { return d.toLocaleDateString("en-IN", { month: "long", year: "numeric" }); } function renderMonthGrid(monthDate) { var start = monthStart(monthDate); var year = start.getFullYear(); var month = start.getMonth(); var firstDow = start.getDay(); var daysInMonth = new Date(year, month + 1, 0).getDate(); var weekdays = (S.weekdaysShort || "Su Mo Tu We Th Fr Sa").split(/\s+/); if (weekdays.length < 7) { weekdays = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; } var html = '
' + monthLabel(start) + "
" + '